// basically a header to include them all
// plus a runtime funtion to initialize the library

//~ ⠀⠀⠀⠀⢀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀⢀⡀⠀⠀⠀
//~ ⣤⣶⣶⡿⠿⠿⠿⠿⠿⣶⣶⣶⠄⠀⠀⠐⢶⣶⣶⣿⡿⠿⠿⠿⠿⢿⣷⠦⠀
//~ ⠙⠏⠁⠀⣤⣶⣶⣶⣶⣒⢳⣆⠀⠀⠀⠀⢠⡞⣒⣲⣶⣖⣶⣦⡀⠀⠉⠛⠁
//~ ⠀⠀⠴⢯⣁⣿⣿⣿⣏⣿⡀⠟⠀⠀⠀⠀⠸⠀⣼⣋⣿⣿⣿⣦⣭⠷⠀⠀⠀
//~ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//~ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀
//~ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠟⠀⠀
//~ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡄⠀⢰⠏⠀⠀⠀
//~ ⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⡴⠟⠁⢀⡟⠀⠀⠀⠀
//~ ⠀⠀⠀⠀⠀⠀⠸⡗⠶⠶⠶⠶⠶⠖⠚⠛⠛⠋⠉⠀⠀⠀⠀⢸⠁⠀⠀⠀⠀
//~ ⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠀⠀⠀⠀⠀

#ifndef BEAN_HEADER
#define BEAN_HEADER

// standard headers
#include <stdio.h>
#include <stdlib.h>

// custom headers
#include "BASIC_TYPES.h"
#include "MEM_SPACE.h"
#include "ENDIAN.h"
#include "ARRAY/BYTE_ARR.h"
#include "ARRAY/ARRAY.h"

// table to hold all existant variable sizes
// this table has to be synced with the var_[header] enums
umax VAR_SIZE[] = {  
  sizeof(char),
  sizeof(byte),
  sizeof(smax),
  sizeof(umax),
  sizeof(fmax),
  sizeof(bool),
  sizeof(var_basic_types),
  sizeof(mem_space),
  sizeof(mem_space_err),
  sizeof(endian_type),
  sizeof(byteshift_type),
  sizeof(bytarr),
};

// table to hold all existant variable names
// this table has to be synced with the var_[header] enums
char * VAR_NAME[] = {  
  "CHAR",
  "BYTE",
  "SMAX",
  "UMAX",
  "FMAX",
  "BOOL",
  "VAR_BASIC_TYPES",
  "MEM_SPACE",
  "MEM_SPACE_ERR",
  "ENDIAN_TYPE",
  "BYTESHIFT_TYPE",
  "BYTARR",
};

// bean startup function
void BEAN_INIT(void)
{
  CHECK_SYS_ENDIAN();
  return;
}

// print all bean's variable type info
void BEAN_PRINT_VAR_INFO(void)
{
  printf("BEAN'S VARIABLE TYPES LIST:\n");
  printf("NAME - VALUE - SIZE\n");
  for (umax i = 0; i < sizeof(VAR_SIZE) / sizeof(umax); i++)
    printf("%-15s - %llu - %llu\n", VAR_NAME[i], i, VAR_SIZE[i]);
  putchar('\n');
  return;
}

#endif // BEAN_HEADER
